#include <types.h>
#include <stdlib.h>
#include <video.h>


static uint_32 cursor_x = 0;
static uint_32 cursor_y = 0;

void move_cursor(int x, int y)
{
  MOVE_CURSOR(x, y);
}



void scroll()
{
  uint_16 *src, *dst;
  dst = TEXTBUFFER;
  src = TEXTBUFFER + 80;	/* 一行的距离 */

  memcpy(dst, src, 80 * 2 * 24); /* 复制 */

  dst = TEXTBUFFER + 80 * 24;
  memset(dst, 0, 80 * 2);	/* 清空最后一行 */
}




void cls()
{
  memset(TEXTBUFFER, 0, TEXTBUFSIZE);
  MOVE_CURSOR(0, 0);
}



void newline()
{
  if(cursor_y == 24)
  {
      scroll();
      move_cursor(0, 24);
  }
  else
    MOVE_CURSOR(0, cursor_y + 1);
}


void backspace()
{
  uint_16 *dst;

  dst = TEXTDSTADDR;
  *dst = 0x0;

  if(cursor_x == 0)
  {
    MOVE_CURSOR(79, cursor_y - 1);
  }
  else
  {
    MOVE_CURSOR(cursor_x - 1, cursor_y);
  }
}

  
  


void vputchar(char c)
{
  uint_16 *dst;

  dst = TEXTDSTADDR;
  switch (c)
  {
  case '\n' :
    *(uint_16 *)dst = 0;
    newline();
    break;
  case '\b' :
    backspace();
    break;
  default :
    *dst =  c | 0x0a00;         /* 不要闪烁, 绿色字 */
    if(cursor_x == 79)		/* 行末 */
    {
      newline();
      return;
    }
    MOVE_CURSOR(cursor_x + 1, cursor_y);
  }
}
